from urllib.parse import urlparse

result = urlparse('https://fgk.chinatax.gov.cn/zcfgk/c100009/listflfg_fg.html')
# print(type(result))
# print(result)
# print(result.scheme, result[0], result.netloc, result[1], sep='\n')
'''
可以发现，base_url 提供了三项内容 scheme、netloc 和 path。如果这 3 项在新的链接里不存在，就予以补充；
如果新的链接存在，就使用新的链接的部分。而 base_url 中的 params、query 和 fragment 是不起作用的。
通过 urljoin 方法，我们可以轻松实现链接的解析、拼合与生成。
'''
from urllib.parse import urljoin
print(urljoin('https://www.baidu.com', 'FAQ.html'))
print(urljoin('https://www.baidu.com', 'https://cuiqingcai.com/FAQ.html'))
print(urljoin('https://www.baidu.com/about.html', 'https://cuiqingcai.com/FAQ.html'))
print(urljoin('https://www.baidu.com/about.html', 'https://cuiqingcai.com/FAQ.html?question=2'))
print(urljoin('https://www.baidu.com?wd=abc', 'https://cuiqingcai.com/index.php'))
print(urljoin('https://www.baidu.com', '?category=2#comment'))
print(urljoin('www.baidu.com', '?category=2#comment'))
print(urljoin('www.baidu.com#comment', '?category=2'))

from urllib.parse import urlencode
'''
这里首先声明一个字典来将参数表示出来，然后调用 urlencode 方法将其序列化为 GET 请求参数。
最后，将参数拼接到 URL 后面即可。
这个方法非常常用。有时为了更加方便地构造参数，我们会事先用字典来表示。要转化为 URL 的参数时，只需要调用该方法即可。

'''
params = {
    'name': '智能购物',
    'age': 25
}
base_url = 'https://www.baidu.com?'
url = base_url + urlencode(params)
print(url)

'''
有了序列化，必然就有反序列化。如果我们有一串 GET 请求参数，利用 parse_qs 方法，就可以将它转回字典，示例如下：
'''
from urllib.parse import parse_qs

query = 'name=germey&age=25'
print(parse_qs(query))

'''
另外，还有一个 parse_qsl 方法，它用于将参数转化为元组组成的列表，示例如下：
'''

from urllib.parse import parse_qsl

query = 'name=germey&age=25'
print(parse_qsl(query))


'''
quote
该方法可以将内容转化为 URL 编码的格式。URL 中带有中文参数时，
有时可能会导致乱码的问题，
此时可以用这个方法可以将中文字符转化为 URL 编码，示例如下：
'''

from urllib.parse import quote

keyword = '壁纸'
url = 'https://www.baidu.com/s?wd=' + quote(keyword)
print( quote(keyword))
'''
有了 quote 方法，当然还有 unquote 方法，它可以进行 URL 解码，示例如下：
'''

from urllib.parse import unquote

url = 'https://www.baidu.com/s?wd=%E5%A3%81%E7%BA%B8'
print(unquote(url))